# REQUIRES: asserts
# RUN: llc -mtriple=powerpc64le-unknown-linux-gnu -mcpu=pwr8 \
# RUN:     -start-before=prologepilog -debug-only=reginfo --filetype=null \
# RUN:     -verify-machineinstrs %s 2>&1 >/dev/null | FileCheck %s --check-prefix=P8
# RUN: llc -mtriple=powerpc64le-unknown-linux-gnu -mcpu=pwr9 \
# RUN:     -start-before=prologepilog -debug-only=reginfo --filetype=null \
# RUN:     -verify-machineinstrs %s 2>&1 >/dev/null | FileCheck %s --check-prefix=P9
# RUN: llc -mtriple=powerpc64le-unknown-linux-gnu -mcpu=pwr9 \
# RUN:     -start-before=prologepilog -debug-only=reginfo \
# RUN:     --filetype=null -ppc-enable-pe-vector-spills \
# RUN:     -verify-machineinstrs %s 2>&1 >/dev/null | FileCheck %s --check-prefix=P9-REGSPILL
# RUN: llc -mtriple=powerpc64le-unknown-linux-gnu -mcpu=pwr10 \
# RUN:     -start-before=prologepilog -debug-only=reginfo --filetype=null \
# RUN:     -verify-machineinstrs %s 2>&1 >/dev/null | FileCheck %s -check-prefix=P10

---
name:            SpillGPR
alignment:       16
tracksRegLiveness: true
liveins:
body:             |
  bb.0.entry:
    $r14 = IMPLICIT_DEF
    $r15 = IMPLICIT_DEF
    $r16 = IMPLICIT_DEF
    $r17 = IMPLICIT_DEF
    $lr8 = IMPLICIT_DEF
    BLR8 implicit undef $lr8, implicit undef $rm
## TODO: Calling requiresFrameIndexScavenging from PEI::runOnMachineFunction
##       always returns TRUE because MFI.isCalleeSavedInfoValid() always
##       indicates that the callee saved info is invalid at that point. The
##       info becomes valid for later calls. Can we do better?
# P8: requiresFrameIndexScavenging for SpillGPR.
# P8: TRUE - Invalid callee saved info.
# P8: requiresFrameIndexScavenging for SpillGPR.
# P8: FALSE - Scavenging is not required.
# P9: requiresFrameIndexScavenging for SpillGPR.
# P9: TRUE - Invalid callee saved info.
# P9: requiresFrameIndexScavenging for SpillGPR.
# P9: FALSE - Scavenging is not required.
# P9-REGSPILL: requiresFrameIndexScavenging for SpillGPR.
# P9-REGSPILL: TRUE - Invalid callee saved info.
# P9-REGSPILL: requiresFrameIndexScavenging for SpillGPR.
# P9-REGSPILL: FALSE - Scavenging is not required.
# P10: requiresFrameIndexScavenging for SpillGPR.
# P10: TRUE - Invalid callee saved info.
# P10: requiresFrameIndexScavenging for SpillGPR.
# P10: FALSE - Scavenging is not required.
...

---
name:            SpillFPR
alignment:       16
tracksRegLiveness: true
liveins:
body:             |
  bb.0.entry:
    $f14 = IMPLICIT_DEF
    $f15 = IMPLICIT_DEF
    $f16 = IMPLICIT_DEF
    $f17 = IMPLICIT_DEF
    $lr8 = IMPLICIT_DEF
    BLR8 implicit undef $lr8, implicit undef $rm

# P8: requiresFrameIndexScavenging for SpillFPR.
# P8: TRUE - Invalid callee saved info.
# P8: requiresFrameIndexScavenging for SpillFPR.
# P8: FALSE - Scavenging is not required.
# P9: requiresFrameIndexScavenging for SpillFPR.
# P9: TRUE - Invalid callee saved info.
# P9: requiresFrameIndexScavenging for SpillFPR.
# P9: FALSE - Scavenging is not required.
# P9-REGSPILL: requiresFrameIndexScavenging for SpillFPR.
# P9-REGSPILL: TRUE - Invalid callee saved info.
# P9-REGSPILL: requiresFrameIndexScavenging for SpillFPR.
# P9-REGSPILL: FALSE - Scavenging is not required.
# P10: requiresFrameIndexScavenging for SpillFPR.
# P10: TRUE - Invalid callee saved info.
# P10: requiresFrameIndexScavenging for SpillFPR.
# P10: FALSE - Scavenging is not required.
...

---
name:            SpillVR
alignment:       16
tracksRegLiveness: true
liveins:
body:             |
  bb.0.entry:
    $v20 = IMPLICIT_DEF
    $v21 = IMPLICIT_DEF
    $v22 = IMPLICIT_DEF
    $v23 = IMPLICIT_DEF
    $lr8 = IMPLICIT_DEF
    BLR8 implicit undef $lr8, implicit undef $rm

# P8: requiresFrameIndexScavenging for SpillVR.
# P8: TRUE - Invalid callee saved info.
# P8: requiresFrameIndexScavenging for SpillVR.
# P8: Memory Operand: STVX for register $v20.
# P8: TRUE - Memory operand is X-Form.
# P9: requiresFrameIndexScavenging for SpillVR.
# P9: TRUE - Invalid callee saved info.
# P9: requiresFrameIndexScavenging for SpillVR.
# P9: Memory Operand: STVX for register $v20.
# P9: TRUE - Memory operand is X-Form.
# P9-REGSPILL: requiresFrameIndexScavenging for SpillVR.
# P9-REGSPILL: TRUE - Invalid callee saved info.
# P9-REGSPILL: requiresFrameIndexScavenging for SpillVR.
# P9-REGSPILL: Memory Operand: STVX for register $v20.
# P9-REGSPILL: TRUE - Memory operand is X-Form.
# P10: requiresFrameIndexScavenging for SpillVR.
# P10: TRUE - Invalid callee saved info.
# P10: requiresFrameIndexScavenging for SpillVR.
# P10: Memory Operand: STVX for register $v20.
# P10: TRUE - Memory operand is X-Form.
...

---
name:            SpillMixed
alignment:       16
tracksRegLiveness: true
liveins:
body:             |
  bb.0.entry:
    $r14 = IMPLICIT_DEF
    $r15 = IMPLICIT_DEF
    $f16 = IMPLICIT_DEF
    $f17 = IMPLICIT_DEF
    $v20 = IMPLICIT_DEF
    $v21 = IMPLICIT_DEF
    $lr8 = IMPLICIT_DEF
    BLR8 implicit undef $lr8, implicit undef $rm

# P8: requiresFrameIndexScavenging for SpillMixed.
# P8: TRUE - Invalid callee saved info.
# P9: requiresFrameIndexScavenging for SpillMixed.
# P9: TRUE - Invalid callee saved info.
# P9-REGSPILL: requiresFrameIndexScavenging for SpillMixed.
# P9-REGSPILL: TRUE - Invalid callee saved info.
# P10: requiresFrameIndexScavenging for SpillMixed.
# P10: TRUE - Invalid callee saved info.
...
